//
//  HZRScrollView.m
//  01.UIScrollView_Reuse
//
//  Created by qianfeng on 15/9/24.
//  Copyright (c) 2015年 韩中睿. All rights reserved.
//

#import "HZRScrollView.h"
//用来复用的总页数
#define NUM_PAGE 3
@implementation HZRScrollView
{
    NSInteger _totolPage;//总页数
    
}
//重写初始化方法，对相关属性进行设置
- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        //设置按页滚动
        self.pagingEnabled = YES;
        //设置显示尺寸
        self.contentSize = CGSizeMake(frame.size.width * NUM_PAGE, frame.size.height);
        //设置代理UIScrollViewDelegate
        self.delegate = self;
        //隐藏滚动条
        self.showsHorizontalScrollIndicator = NO;
    }
    return self;
}

-(void)reloadData{
    //获取总页数，通过数据源代理拿到总页数
    _totolPage = [self.dataSource numberOfPages];
    //如果没有子视图才需要添加，所有用来复用的子视图创建完毕
    if (self.subviews.count == 0) {
        for (int i = 0; i < NUM_PAGE; i++) {
            //从代理方拿到子视图
            UIView *subView = [self.typeDelegate subViewType:i];
            //放到相应的页上，重设frame，大小与scrollView一样
            subView.frame = CGRectMake(i * self.frame.size.width, 0, self.frame.size.width, self.frame.size.height);
            //通过数据源代理刷新显示数据
            [self.dataSource refreshSubView:subView atIndex:i];
            //添加到scrollView上
            [self addSubview:subView];
        }
    }
    
    if (self.dataSource) {
        [self.dataSource loadComplete];
    }
    
}

-(void)gotoPage:(NSInteger)page{
    [self setContentOffset:CGPointMake(self.width*page, 0) animated:NO];
    _currentPage = page;
    [self refreshData];
}

//结束减速，scrollView停止滚动之后，在这儿算页码
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    //pageIndex只会出现三个值，0、1、2。
    NSInteger pageIndex = scrollView.contentOffset.x / self.frame.size.width;
    switch (pageIndex) {
        //马上要显示的是下一张
        case 2:{
            //如果不是最后一个子视图，下一页
            if (_currentPage != _totolPage - 1) {
                if (_currentPage == 0) {
                    _currentPage ++;
                }
                _currentPage ++;
            }
        }
            break;
        //要显示的是上一张
        case 0:{
            if (_currentPage != 0) {
                if (_currentPage == _totolPage - 1) {
                    _currentPage --;
                }
                _currentPage --;
            }
            else{
                _currentPage = 0;
            }
        }
            break;
        case 1:{
            if (scrollView.contentOffset.x == self.frame.size.width) {
                if (_currentPage == _totolPage - 1) {
                    _currentPage--;
                    [self.dataSource loaddaoTwoPage:_currentPage];
                }
                else if(_currentPage == 0){
                    [self.dataSource loadTwoPage];
                }
                
            }
            
        }
            break;
        default:
            break;
    }
    if (pageIndex!=1) {
        [self refreshData];
    }
    
}

-(void)refreshData{
    //如果是第一个子视图，用页码去刷新数据
    if (_currentPage == 0) {
        //刷新前三个子视图的数据
        //刷新第一页
        [self.dataSource refreshSubView:self.subviews[0] atIndex:_currentPage];
        //刷新第二页
        [self.dataSource refreshSubView:self.subviews[1] atIndex:_currentPage + 1];
        //刷新第三页
        [self.dataSource refreshSubView:self.subviews[2] atIndex:_currentPage + 2];
        return;
    }else if (_currentPage == _totolPage - 1) {
        //最后一个子视图时，让代理去刷新最后三个子视图的数据
        //刷新当前页的数据，只要不是最后一个子视图或第一个子视图，始终显示中间一页
        //刷新最后一页的数据
        [self.dataSource refreshSubView:self.subviews[2] atIndex:_currentPage];
        //刷新中间页的数据
        [self.dataSource refreshSubView:self.subviews[1] atIndex:_currentPage - 1];
        //刷新第一页的数据
        [self.dataSource refreshSubView:self.subviews[0] atIndex:_currentPage - 2];
        [self setContentOffset:CGPointMake(self.bounds.size.width*2, 0) animated:NO];
        return;
    }else {
     //当前子视图既不是第一个也不是最后一个时
        //刷新当前页的数据，只要不是最后一个子视图或第一个子视图，始终显示中间一页
        [self.dataSource refreshSubView:self.subviews[0] atIndex:_currentPage - 1];
        //刷新第一页，前一页
        [self.dataSource refreshSubView:self.subviews[1] atIndex:_currentPage];
        //刷新第三页，后一页
        [self.dataSource refreshSubView:self.subviews[2] atIndex:_currentPage + 1];
    }
    //修正偏移量，显示中间一页
    [self setContentOffset:CGPointMake(self.bounds.size.width, 0) animated:NO];
    
}
//自己触发一次刷新数据，将要被添加到窗口上时调用
-(void)willMoveToWindow:(UIWindow *)newWindow{
    [super willMoveToWindow:newWindow];
    //触发刷新
    [self reloadData];
}

@end
